/**
 * 一共有B个不同的串，每个串均含有A个字母，所有字母互异
 * 每个字母有p的概率double一下
 * 问把B个串接起来，一共有多少种可能
 * 首先B个串有B!种可能，然后对一共A*B个字母每个都有两种可能，
 * 所以一共是 2 ^(A*B) * B!
 * 注意p为0或者为1的情况
 */
#include <bits/stdc++.h>
using namespace std;

using llt = long long;
llt const MOD = 998244353LL;

llt qpow(llt a, llt n){
    llt ret = 1;
    while(n){
        if(n & 1) ret = ret * a % MOD;
        a = a * a % MOD;
        n >>= 1;
    }
    return ret;
}

vector<llt> Fac;

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);

    Fac.assign(55, 0);
    Fac[0] = 1;
    for(int i=1;i<Fac.size();++i) Fac[i] = Fac[i - 1] * i % MOD;

    int nofkase = 1; 
    cin >> nofkase;
    while(nofkase--){
        llt a, b, p; cin >> a >> b >> p;
        if(p == 0 or p == 100) cout << Fac[b] << endl;
        else cout << qpow(2, a * b) * Fac[b] % MOD << endl;
    }
    return 0;
}